package visual.texto;

import util.AdaptadorEntrada;
import util.EntradaTexto;
import visual.Menu;

/**
 * Classe que implementa um Menu de Texto abstrato com codigo em comum entre
 * todos os menus de texto.
 * 
 * @author Jonathan Brilhante
 * @author Jose Rafael
 * @author Nata Venancio
 * @author Renato Almeida
 * 
 * @version 2.0
 */

public abstract class MenuTexto implements Menu {
	protected static final int INVALIDA = -1;
	protected static final String SEP = System.getProperty("line.separator");
	protected static final String ERROR = "Entrada inadequada, por favor redija novamente a entrada";
	protected EntradaTexto entrada;

	/**
	 * Cria um meno de texto
	 */
	protected MenuTexto() {
		entrada = new AdaptadorEntrada();
	}

	public abstract void executa();

	/**
	 * Pega uma entrada numerica do teclado, entre o limite inferior e o limite
	 * superior
	 * 
	 * @param limInferior
	 *            o limite inferior
	 * @param limSuperior
	 *            o limite superior
	 * @return a entrada numerica, -1 caso seja invalida
	 */
	protected int getEntradaValida(int limInferior, int limSuperior) {
		int escolha;
		try { // Pega apenas uma entrada funcional
			escolha = Integer.parseInt(entrada.leLinha());
			if (escolha < limInferior || escolha > limSuperior) {
				throw new Exception();
			}
		} catch (Exception e) {
			System.err.print(ERROR + SEP);
			return INVALIDA;
		}
		return escolha;
	}
}